package com.example.leetcode.prcatice;

/**
 * 给你一个长度为 n 的二维整数数组 groups ，同时给你一个整数数组 nums 。
 *
 * 你是否可以从 nums 中选出 n 个 不相交 的子数组，使得第 i 个子数组与 groups[i] （下标从 0 开始）完全相同，且如果 i > 0 ，那么第 (i-1) 个子数组在 nums 中出现的位置在第 i 个子数组前面。（也就是说，这些子数组在 nums 中出现的顺序需要与 groups 顺序相同）
 *
 * 如果你可以找出这样的 n 个子数组，请你返回 true ，否则返回 false 。
 *
 * 如果不存在下标为 k 的元素 nums[k] 属于不止一个子数组，就称这些子数组是 不相交 的。子数组指的是原数组中连续元素组成的一个序列。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/form-array-by-concatenating-subarrays-of-another-array
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test1764 {



    public boolean canChoose(int[][] groups, int[] nums) {
        int j = 0;
        int i = 0;
        for(; i< groups.length;i++) {
            int[] group = groups[i];
            if (j >= nums.length) {
                return false;
            }
            while (j < nums.length) {
                int pattern = pattern(nums, group, j);
                if (pattern == -1) {
                    return false;
                }else {
                    j = pattern + group.length;
                    break;
                }
            }
        }
        return true;
    }

    private int pattern(int[] nums,int[] group,int start) {
        for (int i = start;i<nums.length - group.length + 1;i++) {
            int j = 0;
            for (;j< group.length;j++) {
                if (nums[i + j] != group[j]) {
                    break;
                }
            }
            if (j == group.length) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        Test1764 t = new Test1764();
        int[] nums = {1,2,3,4,10,-2};
        int[][] groups = {{10,-2},{1,2,3,4}};
        System.out.println(t.canChoose(groups, nums));
    }
}
